﻿using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
using System;


// V1.0 - Cree le 09 aout 2014 par Florian OLIVARI
// Recupere tous les textes de localisation en fonction de la langue choisie
// Pour les retranscrire quand on fait 
public class LanguageManager {

	public event EventHandler Done;
	private Dictionary<string, string> _hudValues;
	private string _filePath;
	private string _currentLanguage;


	// Constructeur unique contenant la localisation du fichier des textes du jeu
	public LanguageManager(string filePath){

		// Verifier la validite des parametres
		if (filePath == null || filePath == "") {
			throw new Exception("Le chemin indique pour la localisation est mal renseigne !");
		}

		// Mise en place d'un dictionnaire contenant les textes du jeu
		_hudValues = new Dictionary<string, string> ();

		// Valuation de la position du fichier de local
		_filePath = filePath;
	}

	public void load(string language){

		// Creer l'element qui va nous permettre de recuperer le document xml
		XmlDocument xmlDoc = new XmlDocument ();

		// Charger le document xml si le fichier existe
		if (File.Exists (_filePath + language + ".xml")) {

			// Charger le cas échéant puisqu'il existe
			xmlDoc.Load (_filePath + language + ".xml");

			// Creer une liste recuperant la racine du fichier xml
			XmlNodeList hudList = xmlDoc.GetElementsByTagName("hud");

			// tourner en boucle dans le noeud
			foreach(XmlNode hudInfo in hudList){

				// Acceder aux elements du xml
				XmlNodeList hudContent = hudInfo.ChildNodes;

				// Boucler dans les elements
				foreach(XmlNode hudItems in hudContent){

					// Si le noeud en question est la localisation
					if(hudItems.Name == "hudName"){

						// Recuperer les enfants
						XmlNodeList hudNameList = hudItems.ChildNodes;

						// Verifier si le name existe
						if(hudNameList[0] == null || hudNameList[0].InnerXml == "" || hudNameList[0].Name != "name"){
							throw new Exception("hudName : name invalide");
						}

						// Verifier si sa valeur existe
						else if(hudNameList[1] == null || hudNameList[1].InnerXml == "" || hudNameList[1].Name != "value"){
							throw new Exception("hudName : values invalide");
						}

						// Stocker l'element dans le dictionnaire le cas échéant
						else {
							_hudValues.Add(hudNameList[0].InnerXml, hudNameList[1].InnerXml);
						}

					}

					else{
						throw new Exception("Erreur dans la conception du fichier xml (une balise est peut-etre mal fermee)");
					}
				}
			}

			// Dispatcher l'evt quand le chargement et la compression du xml est terminée
			Done(this, EventArgs.Empty);
		} 

		// Le fichier n'existe pas, on envoie un rapport d'erreur
		else {
			throw new Exception("le fichier " + _filePath + language + ".xml n'existe pas !");	
		}

	}

	// Recuperer par le nom la valeur correspondante au texte
	public string hudValues(string name){

		// Verifier la valeur du parametre
		if (name == null || name == "") {

			throw new Exception ("name invalide, valeur introuvable !");
		}

		else {

			// Renvoyer la valeur correspondante a la cle demande par l'utilisateur
			return _hudValues[name];
		}
	}
}
